home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / accountSelector.js < prev    next >
Text File  |  2009-12-16  |  15KB  |  411 lines

  1. Components.utils.import("resource://yoono/yoonoCookies.js");
  2.  
  3. var gAccountSelector = {
  4.   get _btn () {
  5.     delete this._btn;
  6.     this._btn = document.getElementById("urlbar-account-selector");
  7.     return this._btn;
  8.   },
  9.   get _btnName () {
  10.     delete this._btnName;
  11.     this._btnName = document.getElementById("account-selector-name");
  12.     return this._btnName;
  13.   },
  14.   get _btnIcon () {
  15.     delete this._btnIcon;
  16.     this._btnIcon = document.getElementById("account-selector-icon");
  17.     return this._btnIcon;
  18.   },
  19.   
  20.   get _popup () {
  21.     delete this._popup;
  22.     this._popup = document.getElementById("account-selector-popup");
  23.     return this._popup;
  24.   },
  25.   get _sessionList () {
  26.     delete this._sessionList;
  27.     return this._sessionList = document.getElementById("account-selector-popup-list");
  28.     return this._sessionList;
  29.   },
  30.   get _sessionTemplate () {
  31.     delete this._sessionTemplate;
  32.     return this._sessionTemplate = document.getElementById("account-selector-session-template");
  33.     return this._sessionTemplate;
  34.   },
  35.   
  36.   get _deck () {
  37.     delete this._deck;
  38.     return this._deck = document.getElementById("account-selector-popup-innerbox");
  39.     return this._deck;
  40.   },
  41.   
  42.   get _formName () {
  43.     delete this._formName;
  44.     return this._formName = document.getElementById("account-selector-form-name");
  45.     return this._formName;
  46.   },
  47.   get _formHome () {
  48.     delete this._formHome;
  49.     return this._formHome = document.getElementById("account-selector-form-homepage");
  50.     return this._formHome;
  51.   },
  52.   get _formAvatar () {
  53.     delete this._formAvatar;
  54.     return this._formAvatar = document.getElementById("account-selector-form-avatar");
  55.     return this._formAvatar;
  56.   },
  57.   
  58.   get _bundle () {
  59.     delete this._bundle;
  60.     return this._bundle = document.getElementById("account-selector-bundle");
  61.     return this._bundle;
  62.   }
  63.  
  64. };
  65.  
  66. gAccountSelector.getNetworkNameId = function (id) {
  67.     if (id==1)
  68.     return "twitter";
  69.   else if (id==2) 
  70.     return "facebook";
  71.   else if (id==3) 
  72.     return "myspace";
  73.   else if (id==4) 
  74.     return "flickr";
  75.   else if (id==5) 
  76.     return "friendfeed";
  77.   else if (id==6) 
  78.     return "imeem";
  79.   else if (id==7) 
  80.     return "viadeo";
  81.   else if (id==8) 
  82.     return "yoono";
  83.   else if (id==9) 
  84.     return "linkedin";
  85.   else if (id==10) 
  86.     return "aimmessenger";
  87.   else if (id==11) 
  88.     return "googletalk";
  89.   else if (id==12) 
  90.     return "livemessenger";
  91.   else if (id==13) 
  92.     return "yahoomessenger";
  93.   return "";
  94. }
  95.  
  96. gAccountSelector.getNetworkHome = function (id) {
  97.     if (id==1)
  98.     return "http://twitter.com";
  99.   else if (id==2) 
  100.     return "http://facebook.com";
  101.   else if (id==3) 
  102.     return "http://myspace.com";
  103.   else if (id==4) 
  104.     return "http://flickr.com";
  105.   else if (id==5) 
  106.     return "http://friendfeed.com";
  107.   else if (id==6) 
  108.     return "http://imeem.com";
  109.   else if (id==7) 
  110.     return "http://viadeo.com";
  111.   else if (id==8) 
  112.     return "http://yoono.com";
  113.   else if (id==9) 
  114.     return "http://www.linkedin.com/home";
  115.   else if (id==10) 
  116.     return "http://services.aol.fr/aim/";
  117.   else if (id==11) 
  118.     return "http://www.google.com/talk/";
  119.   else if (id==12) 
  120.     return "http://www.windowslive.fr/messenger/";
  121.   else if (id==13) 
  122.     return "http://messenger.yahoo.com/";
  123.   return "";
  124. }
  125.  
  126. gAccountSelector.onTabSelect = function () {
  127.   if (typeof gBrowser=="object")
  128.     browser = gBrowser.mCurrentBrowser;
  129.   else
  130.     browser = document.getElementById('website-iframe');
  131.   CookiesService.getSessionInfo(browser, 
  132.     function (session) {
  133.       gAccountSelector._btn.className = session?"active":"inactive";
  134.       if (session) {
  135.         if (session.name)
  136.           gAccountSelector._btnName.setAttribute("value", session.name);
  137.         else
  138.           gAccountSelector._btnName.setAttribute("value", gAccountSelector._bundle.getString("accountSelector.signIn"));
  139.         gAccountSelector._btnName.hidden=false;
  140.       } else {
  141.         gAccountSelector._btnName.setAttribute("value", "");
  142.         gAccountSelector._btnName.hidden=true;
  143.       }
  144.       if (session) {
  145.         gAccountSelector._btnIcon.className = "account-network-icon "+gAccountSelector.getNetworkNameId(session.networkId);
  146.         if (session.avatar && (!session.networkId || session.networkId==-1)) {
  147.           gAccountSelector._btnIcon.src = session.avatar;
  148.         } else {
  149.           gAccountSelector._btnIcon.src = "";
  150.         }
  151.       } else {
  152.         gAccountSelector._btnIcon.className = "account-network-icon default";
  153.         gAccountSelector._btnIcon.src = "";
  154.       }
  155.     });
  156. }
  157.  
  158. gAccountSelector.onPopupHidden = function() {
  159.   this._btn.removeAttribute("open");
  160. }
  161.  
  162. gAccountSelector.onClick = function () {
  163.   // Avoid close/reopen on button click
  164.   if (this._popup.state=="open") return;
  165.   
  166.   this._deck.firstChild.hidden = false;
  167.   this._deck.lastChild.hidden = true;
  168.   
  169.   this._popup.popupBoxObject.setConsumeRollupEvent(Components.interfaces.nsIPopupBoxObject.ROLLUP_CONSUME);
  170.   
  171.   this._btn.setAttribute("open","true");
  172.   
  173.   if (typeof YNPREFBRANCH=="object")
  174.     YNPREFBRANCH.setBoolPref("warnedOnAccounts",true);
  175.   
  176.   var sessionList = this._sessionList;
  177.   while(sessionList.firstChild)
  178.     sessionList.removeChild(sessionList.firstChild);
  179.   CookiesService.getAllSessions(
  180.     function (sessions) {
  181.       gAccountSelector._popup.hidden = false;
  182.       var currentSessionId;
  183.       if (typeof gBrowser=="object")
  184.         currentSessionId = CookiesService.getSessionId(gBrowser.mCurrentBrowser);
  185.       else
  186.         currentSessionId = CookiesService.getSessionId(document.getElementById('website-iframe'));
  187.       try {
  188.         if (typeof gBrowser=="object") {
  189.           var domSession = gAccountSelector.getOneSessionDOMElement({name:gAccountSelector._bundle.getString("accountSelector.globalProfile")});
  190.           if (!currentSessionId)
  191.             domSession.setAttribute("selected","true");
  192.           sessionList.appendChild(domSession);
  193.         }
  194.         for(var i=0; i<sessions.length; i++) {
  195.           if (!sessions[i].name) continue; // Ignore temporary sessions
  196.           var domSession = gAccountSelector.getOneSessionDOMElement(sessions[i]);
  197.           if (sessions[i].id == currentSessionId)
  198.             domSession.setAttribute("selected","true");
  199.           sessionList.appendChild(domSession);
  200.         }
  201.       } catch(e) {
  202.         Components.utils.reportError(e);
  203.       }
  204.       gAccountSelector._popup.openPopup(gAccountSelector._btn, "after_start");
  205.     });
  206. }
  207.  
  208. gAccountSelector.getOneSessionDOMElement = function (session) {
  209.   var box = this._sessionTemplate.cloneNode(true);
  210.   box.session = session;
  211.   box.hidden = false;
  212.   if (!session.id)
  213.     box.className = "account-selector-session global-profile";
  214.   
  215.   var name = box.getElementsByClassName("account-selector-session-name")[0];
  216.   name.setAttribute("value", session.name);
  217.   var avatar = box.getElementsByClassName("account-selector-session-avatar")[0];
  218.   if (session.avatar)
  219.     avatar.setAttribute("src", session.avatar);
  220.   else
  221.     avatar.setAttribute("src", "chrome://yoono/skin/account-selector/icon_default_profile_20.png");
  222.   var network = box.getElementsByClassName("account-selector-session-network")[0];
  223.   if (session.networkId && session.networkId!=-1) {
  224.     network.className = "account-selector-session-network account-network-icon "+gAccountSelector.getNetworkNameId(session.networkId);
  225.   } else {
  226.     network.className = "account-selector-session-network";
  227.   }
  228.   
  229.   if (!session.id) {
  230.     var profileLink = box.getElementsByClassName("account-selector-session-profile")[0];
  231.     profileLink.hidden = true;
  232.     var pipe = box.getElementsByClassName("account-selector-session-pipe")[0];
  233.     pipe.hidden = true;
  234.   }
  235.   return box;
  236. }
  237.  
  238. gAccountSelector.onSessionClick = function (event, domElement) {
  239.   var session = domElement.session;
  240.   var browser;
  241.   if (typeof gBrowser=="object")
  242.     browser = gBrowser.mCurrentBrowser;
  243.   else
  244.     browser = document.getElementById('website-iframe');
  245.   var classname = event.target.className;
  246.   if (classname!="account-selector-session-stack" &&
  247.       classname!="account-selector-session-avatar" &&
  248.       !classname.match("account-selector-session-network") &&
  249.       classname!="account-selector-session-name" &&
  250.       classname!="account-selector-session-profile" &&
  251.       classname!="account-selector-session-reload"
  252.     ) return;
  253.   var onlyReload = classname=="account-selector-session-reload";
  254.   if (session.id) {
  255.     CookiesService.attachSessionToBrowser(browser, session.id, function () {
  256.       var homeURL = session.homepage;
  257.       if (!homeURL)
  258.         homeURL = gAccountSelector.getNetworkHome(session.networkId);
  259.       if (!onlyReload && homeURL) {
  260.         if (browser._originalLoadURIWithFlags) // bypass loadURI overload that reset selected account
  261.           browser._originalLoadURIWithFlags(homeURL);
  262.         else
  263.           browser.loadURI(homeURL, null, null);
  264.       } else {
  265.         var reloadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
  266.         browser.reload(reloadFlags);
  267.       }
  268.     });
  269.   } else {
  270.     CookiesService.detachSessionFromBrowser(browser);
  271.     // BrowserReloadSkipCache();
  272.     var reloadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
  273.     browser.reload(reloadFlags);
  274.   }
  275.   this._popup.hidePopup();
  276.   this.onTabSelect();
  277. }
  278.  
  279. gAccountSelector.addNewProfile = function () {
  280.   this._deck.firstChild.hidden = true;
  281.   this._deck.lastChild.hidden = false;
  282. }
  283.  
  284. gAccountSelector.formAdd = function () {
  285.   var name = this._formName.value;
  286.   var home = this._formHome.value;
  287.   var avatar = this._formAvatar.value;
  288.   
  289.   this.formReset();
  290.   this._popup.hidePopup();
  291.   
  292.   CookiesService.addCustomProfile(name, home, avatar, 
  293.     function (sessionId) {
  294.       CookiesService.attachSessionToBrowser(browser, sessionId, function () {
  295.         var homeURL = home;
  296.         if (browser._originalLoadURIWithFlags) // bypass loadURI overload that reset selected account
  297.           browser._originalLoadURIWithFlags(homeURL);
  298.         else
  299.           browser.loadURI(homeURL, null, null);
  300.       });
  301.     });
  302.   
  303.   
  304.   
  305.   
  306. }
  307.  
  308. gAccountSelector.formCancel = function () {
  309.   this.formReset();
  310. }
  311.  
  312. gAccountSelector.formReset = function () {
  313.   this._deck.firstChild.hidden = false;
  314.   this._deck.lastChild.hidden = true;
  315.   
  316.   this._formName.reset();
  317.   this._formHome.reset();
  318.   this._formAvatar.reset();
  319. }
  320.  
  321. gAccountSelector.help = function () {
  322.   this._popup.hidePopup();
  323.   var helpURL = "http://www.yoono.com/help.html#profile_selector";
  324.   if (typeof gBrowser=="object")
  325.     gBrowser.selectedTab = gBrowser.addTab(helpURL);
  326.   else
  327.     document.getElementById('website-iframe').loadURI(helpURL,null,null);
  328. }
  329.  
  330. var infoLayer = null;
  331. gAccountSelector.displayInfoBubble = function () {
  332.   //TODO: safely load dependancies like: YNPREF vars
  333.   if (typeof gBrowser!="object") return; // Don't display this in yoono desktop
  334.   
  335.   if (YNPREFBRANCH.getBoolPref("warnedOnAccounts")) return;
  336.   
  337.   var scriptLoader =  Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
  338.   scriptLoader.loadSubScript("chrome://yoonosb/content/js/services/alerts/Layer.js");
  339.  
  340.   // Hack : used by Layer for errors ...
  341.   YServices = YOONO_CMPT.getYServices();
  342.   
  343.   if (infoLayer)
  344.     infoLayer.close();
  345.   infoLayer = new Layer();
  346.   infoLayer.setOpacityEffet(true);
  347.   infoLayer.resize(420,140);
  348.   infoLayer.move("relative-bottom",177,0,this._btn);
  349.   
  350.   var css=[];
  351.   css.push('#main-box {position:absolute;left:0;top:0;width:420px;height:140px;}');
  352.   css.push('#border-box {font-family:Arial;font-size: 12px; position:absolute;top:8px;bottom:0;right:0;left:0; padding:15px; border: 2px solid black; background:white; -moz-border-radius: 5px;}');
  353.   css.push('#icon {float:left;margin-left:5px;width:38px;height:56px;background-image:url(chrome://yoono/skin/close-popup/i_icon.png);}');
  354.   css.push('#margin-box {margin-left: 60px; margin-right: 30px; margin-bottom: 40px;}');
  355.   css.push('#checkbox-line { padding: 3px; cursor: pointer; -moz-border-radius: 5px; color: white; background-image: url(chrome://yoono/skin/close-popup/button_bg.png); position: absolute; bottom: 10px; left: 75px; display: inline-block; padding-right: 10px;}');
  356.   css.push('#checkbox-line:hover #checkbox { background-image: url(chrome://yoono/skin/close-popup/coche.png); }');
  357.   css.push('#checkbox {cursor: pointer;float: left;margin-top:2px;border: 1px solid #c0c0c0;-moz-border-radius: 3px; width: 10px; height: 10px;}');
  358.   css.push('#checkbox-text {cursor: pointer;margin-left: 18px;color: white;}');
  359.   css.push('#button-ok { padding: 3px; cursor: pointer; -moz-border-radius: 5px; color: white; background-image: url(chrome://yoono/skin/close-popup/button_bg.png); position: absolute; bottom: 10px; right: 30px; text-align: center; width: 40px;}');
  360.   css.push('#top-arrow {position:absolute;top:0;left:20px; width:21px; height: 10px; background-image: url(chrome://yoono/skin/close-popup/up_arrow.png);}');
  361.   if (navigator.platform.indexOf('Mac')==0) {
  362.     css.push('#border-box{-moz-border-radius:0;top:0;} #top-arrow{display:none;}');
  363.   }
  364.   infoLayer.setStyleText(css.join(''));
  365.   
  366.   var title = gAccountSelector._bundle.getString("accountSelector.infoTitle");
  367.   var text = gAccountSelector._bundle.getString("accountSelector.infoText");
  368.   var disable = gAccountSelector._bundle.getString("accountSelector.infoDisable");
  369.   
  370.   var html=[];
  371.   html.push('<div id="main-box">');
  372.   html.push('  <div id="border-box">');
  373.   html.push('    <div id="button-ok">OK</div>');
  374.   html.push('    <div id="icon"></div>');
  375.   html.push('    <div id="checkbox-line" style="clear:both">');
  376.   html.push('      <div id="checkbox"></div><div id="checkbox-text">'+disable+'</div>');
  377.   html.push('    </div>');
  378.   html.push('    <div id="margin-box">');
  379.   html.push('      <strong>'+title+'</strong><br />');
  380.   html.push('      '+text+'<br/>');
  381.   html.push('    </div>');
  382.   html.push('  </div>');
  383.   html.push('  <div id="top-arrow"></div>');
  384.   html.push('</div>');
  385.   infoLayer.setContent(html.join(''));
  386.  
  387.   infoLayer.show(function () {
  388.     var btn = infoLayer.getElementById('button-ok');
  389.     btn.addEventListener("click", function () {
  390.       infoLayer.close();
  391.       infoLayer=null;
  392.     },false);
  393.     var checkbox = infoLayer.getElementById('checkbox-line');
  394.     checkbox.addEventListener("click", function () {
  395.       YNPREFBRANCH.setBoolPref("warnedOnAccounts",true);
  396.       infoLayer.close();
  397.       infoLayer=null;
  398.     },false);
  399.   });
  400. }
  401.  
  402. window.addEventListener("load",
  403.   function () {
  404.     window.removeEventListener("load",arguments.callee,false);
  405.     if (typeof gBrowser!="object") return; // No gBrowser on Yoono Desktop
  406.     var container = gBrowser.tabContainer;
  407.     container.addEventListener("TabSelect", function () {
  408.       gAccountSelector.onTabSelect();
  409.     }, false);
  410.     gAccountSelector.onTabSelect();
  411.   }, false);